<?php

/**
 * home actions.
 *
 * @package    dnevnik
 * @subpackage home
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
 */
class homeActions extends sfActions
{
   public function executeIndex(sfWebRequest $request)
  {
     if($this->getUser()->isAuthenticated())
     {
        $profil = DbFinder::from('Profil')->findPk($this->getUser()->getAttribute('id'));
        if($profil->getTip() == ProfilPeer::$tip['roditelj'])
        {
           $uceniks = UcenikPeer::getJoin()->where('Ucenik.RoditeljId', $profil->getId())->find();
           $this->uceniks = $uceniks;
        }
        $this->profil = $profil;
     }

  }

  public function executeDnevnik(sfWebRequest $request)
  {
      $roditelj = DbFinder::from('Roditelj')->findPk($this->getUser()->getAttribute('id'));
      if(!(Functions::clanarina($roditelj)))
        $this->redirect('/roditelj/placanje/error/1');
      if(!($ucenik_id = $request->getParameter('ucenik_idp')))
        $ucenik_id = $request->getParameter('ucenik_id');

      $ucenik = DbFinder::from('Ucenik')->join('Razred')->leftJoin('Smer.Id', 'Razred.SmerId')->with('Razred')->with('Smer')->findPk($ucenik_id);
      $razred = $ucenik->getRazred();
      $smer = $razred->getSmer();

      $dnevnik = new Dnevnik($ucenik);
      list($this->predmets, $this->izbornis, $grupas) = $dnevnik->getPredmetiUcenika();

      $ucenik_dbs = UcenikPeer::getJoin()->where('Ucenik.RoditeljId', $this->getUser()->getAttribute('id'))->find();
      $uceniks = array();
      foreach($ucenik_dbs as $ucenik_db)
        $uceniks[$ucenik_db->getId()] = $ucenik_db->getColumn('Ime');

      $this->uceniks = $uceniks;
      $this->ocenas = $dnevnik->getUcenikOcenas();
      $this->zakljucnas = $dnevnik->getUcenikZakljucnas();
      $this->izostanaks = $dnevnik->getUcenikIzostanaks($ucenik_id);
      $this->smer = $smer;
      $this->ucenik = $ucenik;
      $this->razred = $razred;
      $this->setLayout('dnevnik');
  }

  public function executeSettings(sfWebRequest $request)
  {
      isicsBreadcrumbs::getInstance()->addItem($this->getContext()->getI18N()->__('Podešavanja profila'));

      $profil = DbFinder::from('Profil')->join('Roditelj')->with('Roditelj')->findPk($this->getUser()->getAttribute('id'));
      $roditelj = $profil->getRoditelj();
      if($request->isMethod('post'))
      {
          $this->error = $this->settingsValidacija($request, $profil);
          if(!$this->error)
          {
              $profil->setIme($request->getParameter('ime'));
              $profil->setPrezime($request->getParameter('prezime'));
              $mobilni = str_replace(' ', '', $request->getParameter('mobilni'));
              $mobilni = str_replace('-', '', $mobilni);
              $profil->setMobilni($mobilni);
              if($profil->getUsername() != $request->getParameter('username'))
                $profil->setUsername($request->getParameter('username'));
              if($request->getParameter('password') != '')
                $profil->setPlainPassword($request->getParameter('password'));

              if($profil->getEMail() != $request->getParameter('e_mail'))
                $profil->setEMail($request->getParameter('e_mail'));

              $roditelj->setImeMajka($request->getParameter('ime_majka'));
              $roditelj->setPrezimeMajka($request->getParameter('prezime_majka'));
              $roditelj->setImeStaratelj($request->getParameter('ime_staratelj'));
              $roditelj->setPrezimeStaratelj($request->getParameter('prezime_staratelj'));
              $mobilni_2 = str_replace(' ', '', $request->getParameter('mobilni_2'));
              $mobilni_2 = str_replace('-', '', $mobilni_2);
              $roditelj->setMobilni2($mobilni_2);
              $roditelj->setOcene($request->getParameter('ocene'));
              $roditelj->setIzostanci($request->getParameter('izostanci'));
              $roditelj->setDomaci($request->getParameter('domaci'));
              $roditelj->setObavestenja($request->getParameter('obavestenja'));
              $roditelj->setObaTelefona($request->getParameter('oba_telefona'));

              if($profil->save() and $roditelj->save())
                $this->error = '<li class="saved">'.$this->getContext()->getI18N()->__('Podešavanja su sačuvana!').'</li>';
          }
      }

      $this->profil = $profil;
      $this->roditelj = $roditelj;
  }

  private function settingsValidacija($request, $profil)
  {
      $err = '';
      if($profil->getUsername() != $request->getParameter('username'))
      {
        if(strlen($request->getParameter('username')) < 2)
          $err .= '<li>'.$this->getContext()->getI18N()->__('Korisničko ime je prekratko!').'</li>';
        if(DbFinder::from('Profil')->where('Username', $request->getParameter('username'))->count())
          $err .= '<li>'.$this->getContext()->getI18N()->__('Korisničko ime već postoji u bazi!').'</li>';
      }
      if($request->getParameter('password') != '')
      {
        if(strlen($request->getParameter('password')) < 2)
            $err .= '<li>'.$this->getContext()->getI18N()->__('Šifra je prekratka!').'</li>';
        if($request->getParameter('password') != $request->getParameter('repeat'))
            $err .= '<li>'.$this->getContext()->getI18N()->__('Šifre se ne slažu!').'</li>';
      }

    if(strlen($err) > 0)
      return $err;
    return FALSE;
  }

  public function executePlacanje(sfWebRequest $request)
  {
     $profil = DbFinder::from('Profil')->join('Roditelj')->join('Skola')->with('Roditelj')->with('Skola')->findPk($this->getUser()->getAttribute('id'));
     $roditelj = $profil->getRoditelj();

     $this->profil = $profil;
     $this->roditelj = $roditelj;
     $this->skola = $roditelj->getSkola();
     $this->setLayout('dnevnik');
  }

  public function executeIstorija(sfWebRequest $request)
  {
     $uplatas = DbFinder::from('Uplata')->where('ProfilId', $this->getUser()->getAttribute('id'))->find();

     $this->uplatas = $uplatas;
     $this->setLayout('dnevnik');
  }

  public function executeUplatnicaImage(sfWebRequest $request)
  {
    $iznos = $request->getParameter('amount');
    $vrstas = array('Članarina za 1. polugodište', 'Članarina za 2. polugodište', 'Cela školska godina', 'SMS kredit');
    $vrsta = $vrstas[$request->getParameter('vrsta')];

    $profil = DbFinder::from('Profil')->join('Roditelj')->with('Roditelj')->findPk($this->getUser()->getAttribute('id'));

    $img = new sfImage('images/uplatnica.gif', 'image/gif', 'GD');

    $iznos = number_format($iznos, 2, ',', '.');
    $iznos_x = 520 - ((strlen($iznos) - 1) * 9);

    $img->Text($profil->getRoditelj(), 18, 43);

    $adr = explode(', ', $profil->getAdresa());
    if(isset($adr[1]))
    {
       $img->Text($adr[0], 18, 55);
       $img->Text($adr[1], 18, 68);
    }
    else
      $img->Text($profil->getAdresa(), 18, 55);
    $img->Text('Info Time d.o.o.', 18, 148);
    $img->Text('Dunavska 86 11000, Beograd', 18, 163);
    $img->Text('160-305130-75', 340, 83);
    $img->Text('= '.$iznos, 392, 47);
    $img->Text($vrsta, 18, 98);

    $response = $this->getResponse();
    $response->setContentType($img->getMIMEType());
    $response->setContent($img);

    return sfView::NONE;
  }

  public function executeIzostanci(sfWebRequest $request)
  {
     $ucenik_id = $request->getParameter('ucenik_id');
     $ucenik = DbFinder::from('Ucenik')->findPk($ucenik_id);
     $predmets = $ucenik->getRazred()->getPredmets();
     $events = array();
     $domaci = array();
     $izostak_dbs = DbFinder::from('Izostanak')->select(array('Datum', 'Cas', 'Opravdan', 'PredmetId'))->where('UcenikId', $ucenik_id)->orderBy('Datum')->orderBy('Cas')->find();
     foreach($izostak_dbs as $izostak_db)
     {
        $mesec = (int)substr($izostak_db['Datum'], 5, 2);
        $dan = (int)substr($izostak_db['Datum'], 8, 2);
        if(!isset($events[$mesec][$dan]))
          $events[$mesec][$dan] = 'Izostanci:<br />';
        $events[$mesec][$dan] .= $izostak_db['Cas'].'. '.($izostak_db['Opravdan'] ? 'opravdan' : 'neopravdan').($izostak_db['PredmetId'] ? $izostak_db['PredmetId'] : '').'<br />';
     }

     $domaci_dbs = DbFinder::from('Domaci')->select(array('Datum', 'PredmetId', 'Opis'))->where('RazredId', $ucenik->getRazredId())->find();
     foreach($domaci_dbs as $domaci_db)
     {
        $mesec = (int)substr($domaci_db['Datum'], 5, 2);
        $dan = (int)substr($domaci_db['Datum'], 8, 2);
        if(!isset($domaci[$mesec][$dan]))
          $events[$mesec][$dan] .= 'Domaći zadaci:<br />';
        $events[$mesec][$dan] .= $predmets[$domaci_db['PredmetId']].':<br />'.wordwrap(str_replace("'", "`", str_replace('"', '`', $domaci_db['Opis'])), 80, '<br />').'<br />';
        $domaci[$mesec][$dan] = 1;
     }

     $godina = date('Y');
     if(Functions::period() == 1)
       $meseci = array(9 => $godina, 10 => $godina, 11 => $godina, 12 => $godina, 1 => ($godina + 1), 2 => ($godina + 1), 3 => ($godina + 1), 4 => ($godina + 1), 5 => ($godina + 1), 6 => ($godina + 1), 7 => ($godina + 1), 8 => ($godina + 1));
     else  $meseci = array(9 => ($godina - 1), 10 => ($godina - 1), 11 => ($godina - 1), 12 => ($godina - 1), 1 => $godina, 2 => $godina, 3 => $godina, 4 => $godina, 5 => $godina, 6 => $godina, 7 => $godina, 8 => $godina);

     $cal_txt = '<table><tr>';
     $br = 0;
     foreach($meseci as $mes => $god)
     {
       $cal_txt .= '<td class="calendar_cell">'.$this->generateCalendar($god, $mes, isset($events[$mes]) ? $events[$mes] : array()).'</td>';
       if(++$br % 3 == 0)
         $cal_txt .= '</tr>';
     }
     $cal_txt .= '</table>';

     return $this->renderText($cal_txt);
  }

  private function generateCalendar($godina, $mesec, $events)
  {
       $timestamp = strtotime($godina.'-'.$mesec.'-1 04:00:00');
       $prvi = date("N", $timestamp);
       $poslednji = date("w", strtotime('-12 hours',strtotime('+1 month', $timestamp)));
       $ukupno = date("t", $timestamp);
       $dani = Functions::$dani_simple;
       $meseci = Functions::$meseci_simple;

       $cal = '<table class="calendar">';
       $cal .= '<caption class="calendar-month">'.$meseci[($mesec - 1)].' '.$godina.'</caption>';
       $cal .= '<tbody><tr>';
       foreach($dani as $dan)
         $cal .= '<th abbr="'.$dan.'">'.mb_substr($dan, 0, 3, 'UTF-8').'</th>';

       // stampa prvi cell, colspan
       $cal .= '<tr>';
       if($prvi != 1)
         $cal .= '<td colspan="'.($prvi-1).'"></td>';
       // ostatak prve nedelje
       $tr_dan = 1;
       while($prvi++ < 8)
         $cal .= '<td'.(($prvi == 8) ? (' class="nedelja"') : '').((isset($events[$tr_dan])) ? (' class="tooltip has_event" title="'.$events[$tr_dan].'"') : '').'>'.$tr_dan++.'</td>';
         //$cal .= '<td>'.$tr_dan++.'</td>';
       $cal .= '</tr>';

       // ostatak meseca
       $cal .= '<tr>';
       $br = 0;
       while($tr_dan < ($ukupno + 1))
       {
          $cal .= '<td'.(($br == 6) ? (' class="nedelja"') : '').((isset($events[$tr_dan])) ? (' class="tooltip has_event" title="'.$events[$tr_dan].'"') : '').'>'.$tr_dan++.'</td>';
          //$cal .= '<td>'.$tr_dan++.'</td>';
          if($br++ == 6)
          {
             $br = 0;
             $cal .= '</tr>';
          }
       }

       // poslednji cell, colspan
       if($poslednji != 7)
         $cal .= '<td colspan="'.(7 - $poslednji).'"></td></tr>';

       $cal .= '</tbody></table>';

       return $cal;
  }

}
